/**
 * @description: 旋转数组
 * @author: huen2015
 */

// ## 题目

// 定义一个函数，实现数组的旋转。如输入 `[1, 2, 3, 4, 5, 6, 7]` 和 `k = 4`， 输出 `[4, 5, 6, 7, 1, 2, 3]`

// 时间复杂度：O(1) 空间复杂度：O(n)
export function arrayRotate(arr: number[], k: number): number[] {
	const len = arr.length
	if (!k || !len) return arr

	const step = Math.abs(k % len)
	const part1 = arr.slice(-step)
	const part2 = arr.slice(0, length - step)
	const part3 = part1.concat(part2)
	return part3
}

// 时间复杂度：O(n2) 空间复杂度：O(1)
export function arrayRotate1(arr: number[], k: number): number[] {
	const len = arr.length
	if (!k || !len) return arr

	const step = Math.abs(k % len)
	for (let i = 0; i < step; i++) {
		const item = arr.pop() as number
		arr.unshift(item)
	}
	return arr
}

// 功能测试
const arr = [1, 2, 3, 4, 5, 6, 7]
const k = 2
console.log('数组旋转', arrayRotate(arr, 3)) // [5, 6, 7, 1, 2, 3, 4]
console.log('数组旋转', arrayRotate1(arr, 3)) // [5, 6, 7, 1, 2, 3, 4]
